// 登录状态管理工具
export const authUtils = {
  // 检查是否已登录
  isLoggedIn() {
    try {
      const token = uni.getStorageSync('token');
      const userInfo = uni.getStorageSync('userInfo');
      
      // 检查token和用户信息是否存在
      if (!token || !userInfo) {
        return false;
      }
      
      // 这里可以添加token过期检查
      // const tokenExpiry = uni.getStorageSync('tokenExpiry');
      // if (tokenExpiry && Date.now() > tokenExpiry) {
      //   this.clearAuth();
      //   return false;
      // }
      
      return true;
    } catch (error) {
      console.error('检查登录状态失败:', error);
      return false;
    }
  },
  
  // 获取用户信息
  getUserInfo() {
    try {
      return uni.getStorageSync('userInfo');
    } catch (error) {
      console.error('获取用户信息失败:', error);
      return null;
    }
  },
  
  // 获取token
  getToken() {
    try {
      return uni.getStorageSync('token');
    } catch (error) {
      console.error('获取token失败:', error);
      return null;
    }
  },
  
  // 清除登录信息
  clearAuth() {
    try {
      uni.removeStorageSync('token');
      uni.removeStorageSync('userInfo');
    } catch (error) {
      console.error('清除登录信息失败:', error);
    }
  },
  
  // 重定向到登录页
  redirectToLogin() {
    try {
      const pages = getCurrentPages();
      const currentPage = pages[pages.length - 1];
      const currentRoute = currentPage ? currentPage.route : '';
      
      console.log('当前路由:', currentRoute)
      
      // 如果当前不在登录相关页面，则跳转到登录页
      if (!currentRoute.includes('login') && !currentRoute.includes('register')) {
        console.log('重定向到登录页')
        // 先尝试redirectTo，如果失败再使用reLaunch
        uni.redirectTo({
          url: '/pages/login/login',
          fail: (error) => {
            console.log('redirectTo失败，尝试reLaunch:', error)
            uni.reLaunch({
              url: '/pages/login/login'
            });
          }
        });
      }
    } catch (error) {
      console.error('重定向到登录页失败:', error)
      // 如果出错，直接跳转到登录页
      uni.reLaunch({
        url: '/pages/login/login'
      });
    }
  },
  
  // 需要登录验证的页面列表
  needAuthPages: [
    'pages/index/index'
    // 可以添加更多需要登录的页面
  ],
  
  // 检查当前页面是否需要登录
  checkPageAuth(route) {
    return this.needAuthPages.includes(route);
  }
};

// 页面登录检查混入
export const authMixin = {
  onLoad() {
    // 页面加载时检查登录状态
    setTimeout(() => {
      this.checkAuth();
    }, 200);
  },
  
  onShow() {
    // 页面显示时也进行检查
    setTimeout(() => {
      this.checkAuth();
    }, 100);
  },
  methods: {
    // 检查登录状态
    checkAuth() {
      try {
        const pages = getCurrentPages();
        const currentPage = pages[pages.length - 1];
        const currentRoute = currentPage ? currentPage.route : '';
        
        console.log('authMixin检查登录状态:', currentRoute);
        
        // 如果当前页面需要登录验证且用户未登录
        if (authUtils.checkPageAuth(currentRoute) && !authUtils.isLoggedIn()) {
          console.log('authMixin: 页面需要登录，重定向到登录页');
          authUtils.redirectToLogin();
        }
      } catch (error) {
        console.error('authMixin登录检查失败:', error);
      }
    },
    
    // 手动检查登录状态
    manualCheckAuth() {
      try {
        const pages = getCurrentPages();
        const currentPage = pages[pages.length - 1];
        const currentRoute = currentPage ? currentPage.route : '';
        
        console.log('手动检查登录状态:', currentRoute);
        
        // 如果当前页面需要登录验证且用户未登录
        if (authUtils.checkPageAuth(currentRoute) && !authUtils.isLoggedIn()) {
          console.log('页面需要登录，重定向到登录页');
          // 使用更温和的跳转方式
          uni.redirectTo({
            url: '/pages/login/login',
            fail: () => {
              // 如果redirectTo失败，尝试使用reLaunch
              uni.reLaunch({
                url: '/pages/login/login'
              });
            }
          });
        }
      } catch (error) {
        console.error('手动登录检查失败:', error);
      }
    }
  }
};